package cn.huiyunche.base.service.interfaces;

import cn.huiyunche.base.service.model.BScores;
import cn.huiyunche.base.service.model.CWaybill;
import cn.huiyunche.base.service.vo.PageVo;
import cn.huiyunche.base.service.vo.QueryKyleBillScoresVo;
import cn.huiyunche.base.service.vo.QueryScoresVo;
import cn.huiyunche.base.service.vo.Result;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 积分余额接口类
 *
 * @author lm
 */
public interface BScoresService {

    /**
     * 用户注册 增加积分余额
     * －－ 用户注册(4类)
     * －－ 用户下单 使用积分－扣除 2
     *
     * @param bScores
     * @return
     */
    int addScores(BScores bScores);

    /**
     * 添加 用户总消费金额 接口
     * -- 托运企业 admin月账单结算 添加积分
     *
     * @param orderId
     * @param userId
     * @param userType
     * @param distance
     * @return
     */
    int addTotalCost(Long orderId, Long userId, Integer userType, BigDecimal cost);

    /**
     * 添加 用户总里程数 接口
     *
     * @param userId
     * @param userType
     * @param distance
     * @return
     */
    int addTotalDistance(Long userId, Integer userType, BigDecimal distance);

    /**
     * 添加 用户总里程数 接口
     *
     * @param cWaybill
     * @param distance
     * @return
     */
    int addTotalDistance(CWaybill cWaybill, BigDecimal distance);

    /**
     * 根据当前登录用户
     * 查询积分 scores
     * －－ 托运企业
     *
     * @return
     */
    BigDecimal getScores();

    /**
     * 根据当前登录用户
     * 查询积分流水 scoresTurnover
     * －－ 托运企业
     *
     * @return
     */
    Map<String, Object> getScoresTurnover(PageVo page);

    /**
     * 根据当前登录用户
     * 查询积分 scores
     * 查询积分明细 turnover
     *
     * @return
     */
    Map<String, Object> getScoresAndTurnover(PageVo page);

    /**
     * 查询用户当前积分余额
     *
     * @param userId
     * @param userType
     * @return
     */
    BScores getUserScores(Long userId, int userType);

    /**
     * 查询用户订单 积分可抵扣金额
     * -- 托运个人下单
     *
     * @param customerOrderid 客户订单ID
     * @param userId          用户ID
     * @param userType        用户类型
     * @param totalCost       订单金额(提车费＋交车费＋运费＋保险费＋折扣)
     * @return
     */
    QueryScoresVo computeOrderAmountByScores(Long customerOrderid, Long userId, Integer userType, BigDecimal totalCost);

    /**
     * 快速提现
     * 查询手续费(现金抵扣/积分抵扣)
     *
     * @param amount
     * @return
     */
    Map<String, Object> selectWithdrawalFee(BigDecimal amount);

    /**
     * 查询托运企业月账单结算
     * 可用积分抵扣的金额
     *
     * @param amount
     * @return
     */
    QueryKyleBillScoresVo selectKyleCompanyBillScores(BigDecimal amount, BigDecimal usedAmount);

    /**
     * 查询用户当前积分
     *
     * @param userId
     * @param userType
     * @return
     */
    BScores selectByUserIdAndUserType(Long userId, Integer userType);

    /**
     * 查询托运企业月账单结算
     * 可用积分抵扣的金额
     * －－ 扣除积分
     *
     * @param billId
     * @return
     */
    Result<String> kyleCompanyBillUserScores(Long billId);

}